﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Taschenrechner.DataObjects;

namespace Taschenrechner.Business
{
    public static class Berechnung
    {
        private const int maxElemente = 20;

        public static string Rechne(RechenElement[] re)
        {
            double wert = 0;
            string op = "";

            for (int i = 0; i < re.Length && re[i] != null; i++)
            {

                if (i == 0)
                    wert = re[i].Wert;
                else
                {
                    switch (op)
                    {
                        case "+":
                            wert = wert + re[i].Wert;
                            break;
                        case "-":
                            wert = wert - re[i].Wert;
                            break;
                        case "*":
                            wert = wert * re[i].Wert;
                            break;
                        case "/":
                            wert = wert / re[i].Wert;
                            break;
                    }
                }
                op = re[i].Op;
            }

            return wert.ToString();
        }

        public static string PruefeEingabe(string anzeige, string eingabe, ref bool neueEingabe)
        {
            if (neueEingabe)
            {
                anzeige = string.Empty;
                neueEingabe = false;
            }

            int i = anzeige.LastIndexOf(",");
            //komma kann nur einmal gesetzt werden
            if (i > -1 && eingabe == ",")
                return anzeige;

            //länge nachkommastellen
            if (i > -1 && anzeige.Substring(i).Length > 10)
                return anzeige;

            //speziale komma
            if (eingabe == "," && anzeige == string.Empty)
                return "0,";

            //nur eine 0
            if (anzeige == "0" && eingabe == "0")
                return anzeige;

            return anzeige + eingabe;
        }

        public static void ResetElemente(ref RechenElement[] elemente, ref bool neuerEintrag)
        {
            elemente = new RechenElement[maxElemente];
            neuerEintrag = true;
        }

        public static void AddElement(string wert, string op, RechenElement[] elemente)
        {
            
            double neuerWert;

            if (wert == string.Empty)
                neuerWert = 0;
            else
                neuerWert = Convert.ToDouble(wert);
            for (int i = 0; i < maxElemente; i++)
            {
                if (elemente[i] == null)
                {
                    elemente[i] = new RechenElement(neuerWert, op);
                    break;
                }
                else
                {
                    if (i == maxElemente - 1)
                        throw new NotSupportedException();
                }
            }
        }

    }
}
